package e.odbo.data.generator;

public class CreditCardNumberGenerator extends CardNumberGenerator {
    /*
     中国银行	长城卡	16	首位数字为‘8’（8030为上海卡）或前6位为‘547766’、‘558868’、‘518378’、‘518379’、‘518474’、‘518475’、‘518476’、‘424106’、‘424107’、‘424108’、‘424109’、‘424110’、‘424111’ 、‘438088’、‘438089’、‘356833’、‘356835’
     中国工商银行	牡丹卡	16	前5位‘45806’、‘53098’、‘42701’、‘42702’、‘42703’、‘55836’、‘53099’、‘53097’，前6位‘451804’、‘451810’、‘451811’、‘458071’，
                        第6位至第9位‘0348’和第7位至第10位‘0348’、‘0350’为上海卡
                    15	前6位‘370246’、‘370247’
    中国建设银行	龙卡	16

                     18	前5位:53242（后3位‘269--289’为上海卡），前6位:544033、453242（后3位‘226--289’为上海卡）、491031
                        前6位:553242，前7位4033、5453242、5491031
                        前六位：526410，524094，552245，421349，434061，434062

    龙卡国际普通卡VISA 16	4367 4500、4367 4502（需提供背面7位校验码后3位）
    龙卡国际金卡 VISA	16	4367 4800、4367 4802（需提供背面7位校验码后3位）
                           436718、436738
    龙卡国际普通卡MASTER	16	5324 5000、5324 5050、5324 5002（需提供背面7位校验码后3位）
    龙卡国际金卡 MASTER	16	5324 5800、5324 5850、5324 5802（需提供背面7位校验码后3位）
    中国农业银行	金穗卡	16	前五位：49102,53591
    中国交通银行	太平洋卡(上海地区)	16	53783,49104 (第7到9位为011)
                                    62225(第7到9位为011)（需提供背面7位校验码后3位）
    中国招商银行	国际卡	16	前5位:439188，(VISA)439225，439226，(MASTER)518710，518718
    广东发展银行	广发卡	 	前六位：491032, 491033, 491034, 491035, 491036, 491037, 491038, 493427, 436768, 436769, 436770, 436771, 428911, 406365, 406366, 548844, 518364, 541709, 541710, 520152, 520382
    光大银行	阳光卡	16	前七位：4062540,4062520,4062521 前八位：40625220,40625221,40625222,40625223,40625224
    民生银行	信用卡	16	前六位：421869, 421870, 421871, 407405, 517636, 512466, 528948, 552288, 556610
    中信银行	信用卡	16	前六位：403391, 403392, 403393, 404157, 404158, 404159, 518212, 520108, 514906, 556617, 558916, 433667, 433666
    上海浦东发展银行	信用卡	16	前六位：407438, 404739, 498451（需提供背面7位校验码后3位）
    外卡	VISA（威士）	13,16	4
    外卡	MASTER（万事达）	16	51-55
    外卡	AMEX（运通）	15	34,37
    外卡	DINNERS（大来）	14	300-305,36,38
    外卡	JCB	16  3
            15  2131,1800
     */

    public static final String[] VISA_PREFIX_LIST = new String[]{"4539",
            "4556", "4916", "4532", "4929", "40240071", "4485", "4716", "4"};

    public static final String[] MASTERCARD_PREFIX_LIST = new String[]{"51",
            "52", "53", "54", "55"};

    public static final String[] AMEX_PREFIX_LIST = new String[]{"34", "37"};

    public static final String[] DISCOVER_PREFIX_LIST = new String[]{"6011"};

    public static final String[] DINERS_PREFIX_LIST = new String[]{"300",
            "301", "302", "303", "36", "38"};

    public static final String[] ENROUTE_PREFIX_LIST = new String[]{"2014",
            "2149"};

    public static final String[] JCB_PREFIX_LIST = new String[]{"35"};

    public static final String[] VOYAGER_PREFIX_LIST = new String[]{"8699"};

    public CreditCardNumberGenerator(String[] prefix, int lenght) {
        super(prefix, lenght);
    }

    public CreditCardNumberGenerator(String prefix, int lenght) {
        super(prefix, lenght);
    }

    public CreditCardNumberGenerator() {
        super(MASTERCARD_PREFIX_LIST, 16);
    }

    public String generator() {
        int randomArrayIndex = 0;
        if (prefixList.length > 1)
            randomArrayIndex = (int) Math.floor(Math.random() * prefixList.length);
        String ccnumber = prefixList[randomArrayIndex];
        return completed_number(ccnumber, length);
    }

    public boolean isCardNumber(String creditCardNumber) {
        return isValidCreditCardNumber(creditCardNumber);
    }

    @Override
    public String getName() {
        return "Credit CardNumber";
    }
}
